﻿using System;
using System.Linq;
using System.Web.Mvc;
using KPIS.GERP.Models.SYS;
using KPIS.GERP.Models.SYS.ViewModel;
using KPIS.GERP.WEB.GIMS.Class;
using KPIS.GERP.WEB.GIMS.MessageService;

namespace KPIS.GERP.WEB.GIMS.Controllers
{
    [AccessDeniedAuthorize]
    public class MessageController : Controller
	{
        //private AbsenceApprovalWCF.AbsenceApprovalWCFClient absenceApprovalWCFClient = new AbsenceApprovalWCF.AbsenceApprovalWCFClient();
        //private AbsenceApprovalWF.ServiceClient absenceApprovalWFClient = new AbsenceApprovalWF.ServiceClient();
        //private TempService.TempServiceClient tempServiceClient = new TempService.TempServiceClient();
        private SysApprovalService.SysApprovalServiceClient sysApprovalService = new SysApprovalService.SysApprovalServiceClient();
        private MessageService.MessageServiceClient messageServiceClient = new MessageServiceClient();
		public static Guid DaemonWorkflowUniqueId;

        //public hrm_ps_employees CurrentEmployeeOld
        //{
        //    get { return tempServiceClient.GetEmployeeByCitizen(Class.GimsMembership.CurrentEmpCitizen); }
        //}

        //public int CurrentEmployeeOldSeq
        //{
        //    get { return tempServiceClient.GetEmployeeByCitizen(Class.GimsMembership.CurrentEmpCitizen).emp_seq; }
        //}

		public ActionResult Index()
		{
		    var data = messageServiceClient.SelectMessage(new Message{ToEmpId = Class.GimsMembership.CurrentEmpId, RecordStatus = "!D"}, 
                new [] {"FromEmployee", "ToEmployee"}).OrderByDescending(o=>o.MessageId);
            return View(data);
		}

		public ActionResult TakeAction(int messageId, string actionCode, string messageTitle, string messageReasons, string backto = "")
		{
		    KPIS.GERP.Models.SYS.CommandAction commandAction;
		    switch (actionCode)
		    {
                case "A" : commandAction = CommandAction.Approve;
		            break;
                case "F" : commandAction = CommandAction.Forward;
		            break;
                case "N" : commandAction = CommandAction.SendBack;
		            break;
                case "J" : commandAction = CommandAction.Reject;
		            break;
                case "C" : commandAction = CommandAction.Cancel;
		            break;
                    default: commandAction = CommandAction.Information;
		            break;
		    }
            /*
        // โดยระบบ
        Initial = 0, // เพิ่งเริ่ม

        // โดยผู้บังคับบัญชา
        Approve = 1, // อนุมัติ
        Forward = 2, // ส่งต่อไปขั้นตอนข้างหน้า 1 ขั้นตอน (ไม่ให้เลือก เว้นแต่ขั้นตอนนี้ผู้อนุมัติเป็น JobSite หรือ Team)
        Reject = 3, // ไม่ยอมรับ/ไม่อนุมัติ ข้อความจะตีกลับไปทางสายที่ผ่านมาแต่ละขั้นตอนทุกคน (Optional) ไม่สามารถนำคำขอเดิมกลับมาใช้ได้อีก
        Pending = 4, // พักคำขอ (โดย ผู้อนุมัติ)
        Information = 5, // ขั้นตอนเพื่อส่งข้อความอย่างเดียว
        SendBack = 6, // ตีกลับ พร้อมเหตุผล และ

        // โดยผู้ดูแลระบบ
        Lock = 7, // หยุดคำขอ (โดย ระบบ หรือ Admin)
        // และ Cancel = 8, // ยกเลิกคำขอ (โดยผู้ขอ - ทำระหว่างขออนุมัติ)

        // โดยผู้ขอ ผู้ดูแลระบบ
        Cancel = 8, // ยกเลิกคำขอ (โดยผู้ขอ - ทำระหว่างขออนุมัติ)

        // โดยสายบังคับบัญชา และผู้ขอ และหัวหน้าสูงสุด
        TakeBack = 9, // ยกเลิกคำขอ (โดยผู้ขอ - ทำระหว่างขออนุมัติ)*/
            var commandActionVm = new CommandActionVM();
            commandActionVm.CommandAction = commandAction;
            commandActionVm.MessageId = messageId;
            commandActionVm.ByEmpId = GimsMembership.CurrentEmpId;
            commandActionVm.NewTitle = messageTitle;
            commandActionVm.Remarks = messageReasons; 
		    if(actionCode == "A")
		        sysApprovalService.ExecuteCommandAction(commandActionVm);
			 
			return RedirectToAction("Index");
		}

		public ActionResult ViewDetails(int approvalTaskSeq)
		{ 
            using(var serviceClient= new SysApprovalService.SysApprovalServiceClient())
			{	var obj = (from t in serviceClient.SelectApprovalTasks(GimsMembership.CurrentEmpId)
						   where t.ApprovalTaskId == approvalTaskSeq
						   select t).OrderByDescending(t => t.ApprovalTaskId).FirstOrDefault();

				return View("ViewDetails", obj); 
            }
		} 
    }
}
